function Engine(modules) {
  const installModules = {}
  function req(moduleId) {
    if (installModules[moduleId]) return installModules[moduleId]
    const module = (installModules[moduleId] = {
      l: false,
      i: moduleId,
      exports: {}
    })
    modules[moduleId].call(module.exports, module, module.exports, req)
    module.l = true
    return module.exports
  }
  return req('a')
}

var params = {
  a: function(module, exports, req) {
    eval(
      `
        const b = req('b').default
        console.log(b)
      `
    )
  },
  b: function(module, exports) {
    eval(
      `
        console.log('this is module B')
        exports['default'] = {
          msg: 'test form b'
        }
      `
    )
  }
}

Engine(params)
